如何在mysql php中为客户服务产品构建数据库表结构?

问题描述:

我在这个项目中建立一个有线客户项目数据库结构客户(用户)使用像(settopbox,调制解调器等3或4个不同属性的服务产品)的服务产品。下面是我的数据库表结构: -如何在mysql php中为客户服务产品构建数据库表结构?

客户表

CUSTOMER_ID,姓名,地址,phone_no等

customer_settopbox表
customer_modem表
包表

我的问题是: - 1.为每个设备建立单独的表格并分配给客户是否好?

或任何其他方法是有这个。因为每个设备都有自己的属性,如settopbox具有VCNO,SerialNo等modem具有其他属性。 我会感激不尽。

+0

它一般不是很好建立一个独立的... – Drew

  • 将所有常见产品字段添加到产品表中。
  • 所有自定义文件可放置到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; 
+0

我现在只有两种类型的设备,如settopbox和互联网调制解调器,我需要存储具有不同属性的值,如settopbox有VCNo,SerialNo,ChipId,型号和调制解调器有不同像ModelNo PinNo等 –

+0

我的结构是完全适合你的要求 –

+0

你是对的。非常感谢你。但如何找到客户产品 –

不要为每个设备建立表格。相反,您可以拥有一个名为“设备属性”的表,该表具有每个设备的属性。参考该表并获取每个设备的属性会更容易。在客户的表格中,您可以参考设备。

+0

每个客户可以有多个设备,并在每个客户的设备属性值的存储位置 –

+0

@RammeharSharma,这将是没有问题的。 customer_settopbox表,customer_modem表和packages表可以记录每个条目,并且您可以搜索某个用户拥有的所有产品,然后从属性表中检查产品的属性。 –

+0

可以创建一个表结构的例子 –

这很大程度上取决于你如何看待未来。如果知道数量的产品从不被展开,您可以在客户的表格中增加额外的列。如果,另一方面,产品列表中很容易在将来改变,具有(基本)3列一个单独的表:

- Customer ID (reference to the customer's table record) 
- Product type 
- Product status 

这会给你所有必要的灵活性,同时保持事情简单。

+0

每个客户可以拥有多个设备,并为每个客户存储设备属性值的位置 –

+0

附加表可以具有所需的列数。在我的例子中,我包括了基本的三个,但是你可以(也许应该)根据需要添加尽可能多的。 – FDavidov

+0

客户设备表,如customer_device_id,customer_id,device_name,VCNo,CardNo,SerialNo等,我不知道如何存储具有不同属性的不同设备,并为每个客户提供价值 –