繁体   English   中英

SQL附加列或多对一关系

[英]SQL additional column or Many To One relationship

我有一个Product实体,每个产品都有一个类型,比方说手机或笔记本电脑,因此最好在“ type”列中创建product实体:

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,
)

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM