如何在mysql php中为客户服务产品构建数据库表结构?
我在这个项目中建立一个有线客户项目数据库结构客户(用户)使用像(settopbox,调制解调器等3或4个不同属性的服务产品)的服务产品。下面是我的数据库表结构: -如何在mysql php中为客户服务产品构建数据库表结构?
客户表
CUSTOMER_ID,姓名,地址,phone_no等
customer_settopbox表
customer_modem表
包表
我的问题是: - 1.为每个设备建立单独的表格并分配给客户是否好?
或任何其他方法是有这个。因为每个设备都有自己的属性,如settopbox具有VCNO,SerialNo等modem具有其他属性。 我会感激不尽。
- 将所有常见产品字段添加到产品表中。
- 所有自定义文件可放置到product_custom_attribute表中。
你可以使用结构是这样的:
CREATE TABLE `customer` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`address` VARCHAR(255) NULL,
`phone_no` VARCHAR(10) NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `product_type` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `product` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`type` INT(11) NOT NULL,
`name` VARCHAR(45) NOT NULL,
`description` VARCHAR(255) DEFAULT NULL,
`customer_id` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK product type product_type id_idx` (`type`),
KEY `FK product customer_id customer id_idx` (`customer_id`),
CONSTRAINT `FK product customer_id customer id` FOREIGN KEY (`customer_id`)
REFERENCES `customer` (`id`)
ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT `FK product type product_type id` FOREIGN KEY (`type`)
REFERENCES `product_type` (`id`)
ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=INNODB DEFAULT CHARSET=UTF8;
CREATE TABLE `product_custom_attribute` (
`id` INT NOT NULL AUTO_INCREMENT,
`product_id` INT NOT NULL,
`name` VARCHAR(45) NOT NULL,
`value` VARCHAR(45) NOT NULL,
PRIMARY KEY (`id`),
INDEX `FK product_custom_attribute product_id product id_idx` (`product_id` ASC),
CONSTRAINT `FK product_custom_attribute product_id product id` FOREIGN KEY (`product_id`)
REFERENCES `product` (`id`)
ON DELETE CASCADE ON UPDATE NO ACTION
);
如果你不熟悉FOREIGN KEY
的使用这一个
CREATE TABLE `customer` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`address` VARCHAR(255) NULL,
`phone_no` VARCHAR(10) NULL,
PRIMARY KEY (`id`));
CREATE TABLE `product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` int(11) NOT NULL,
`name` varchar(45) NOT NULL,
`customer_id` int(11) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK product type product_type id_idx` (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `product_custom_attribute` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(11) NOT NULL,
`name` varchar(45) NOT NULL,
`value` varchar(45) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK product_custom_attribute product_id product id_idx` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `product_type` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
我现在只有两种类型的设备,如settopbox和互联网调制解调器,我需要存储具有不同属性的值,如settopbox有VCNo,SerialNo,ChipId,型号和调制解调器有不同像ModelNo PinNo等 –
我的结构是完全适合你的要求 –
你是对的。非常感谢你。但如何找到客户产品 –
不要为每个设备建立表格。相反,您可以拥有一个名为“设备属性”的表,该表具有每个设备的属性。参考该表并获取每个设备的属性会更容易。在客户的表格中,您可以参考设备。
每个客户可以有多个设备,并在每个客户的设备属性值的存储位置 –
@RammeharSharma,这将是没有问题的。 customer_settopbox表,customer_modem表和packages表可以记录每个条目,并且您可以搜索某个用户拥有的所有产品,然后从属性表中检查产品的属性。 –
可以创建一个表结构的例子 –
这很大程度上取决于你如何看待未来。如果知道数量的产品从不被展开,您可以在客户的表格中增加额外的列。如果,另一方面,产品列表中很容易在将来改变,具有(基本)3列一个单独的表:
- Customer ID (reference to the customer's table record)
- Product type
- Product status
这会给你所有必要的灵活性,同时保持事情简单。
每个客户可以拥有多个设备,并为每个客户存储设备属性值的位置 –
附加表可以具有所需的列数。在我的例子中,我包括了基本的三个,但是你可以(也许应该)根据需要添加尽可能多的。 – FDavidov
客户设备表,如customer_device_id,customer_id,device_name,VCNo,CardNo,SerialNo等,我不知道如何存储具有不同属性的不同设备,并为每个客户提供价值 –
它一般不是很好建立一个独立的... – Drew