SQL附加列或多对一关系

时间:2018-08-04 19:19:31

标签: mysql sql

我有一个Product实体,每个产品都有一个类型,例如电话或笔记本电脑,因此最好在“ type”列中创建产品实体:

CREATE TABLE product (
    id int PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    type VARCHAR(10) NOT NULL
)

或仅为该类型创建表并建立多对一关系:

CREATE TABLE product (
    id int PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    type_id INT NOT NULL,
    FOREIGN KEY (type_id) REFERENCES type(id)
)

CREATE TABLE type(
    id int PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(10) NOT NULL,
)

2 个答案:

答案 0 :(得分:0)

假设一个产品可以有多种类型,那么正确的关系就是三个表。就您而言,您只有一种类型。

第二种方法更好的原因是因为它使用适当的外键关系强制执行了类型。因此,您不必担心一行'phone'和另一行'Phone'。您有明确的可用类型列表。

如果这要进入应用程序,则比这样的列表更为重要,因为它直接馈入用户界面中您想要类型列表(例如选择列表)的元素。

答案 1 :(得分:0)

如果您的产品只有一种类型,那么通过引入“其他表”,就不会有任何收获,而且会给您带来不必要的额外复杂性带来很大的风险。类型应在同一表中,表中应为varchar,在Java中具有@Enumerated(String)批注的枚举。