SQL数据库:关系和;模式
我是一名学生,我对数据库模式有一个问题,我已经创建了实体关系图[ERD],在这一步中,我应该做数据库模式,我的数据库上的所有实体必须在它们和其他实体之间有关系吗?i、 e:每个实体前面都应该有一个实体的外键,因为我可以创建所有表,只有两个表可以在它们之间建立关系,我使用我要创建的C#程序控制其他表 **在我的ERD中,所有实体之间都有关系 …我数据库中的所有实体都必须与 其他实体 不,实体当然可以独立存在。虽然在实践中,如果你发现你很少有关系,你可能是做错了什么 你说得有点对,只有两个表可以有一个关系,但我认为关系只能有两个参与者;表当然可以与多个其他表关联 …我数据库中的所有实体都必须与 其他实体 不,实体当然可以独立存在。虽然在实践中,如果你发现你很少有关系,你可能是做错了什么SQL数据库:关系和;模式,sql,database,schema,relational-database,Sql,Database,Schema,Relational Database,我是一名学生,我对数据库模式有一个问题,我已经创建了实体关系图[ERD],在这一步中,我应该做数据库模式,我的数据库上的所有实体必须在它们和其他实体之间有关系吗?i、 e:每个实体前面都应该有一个实体的外键,因为我可以创建所有表,只有两个表可以在它们之间建立关系,我使用我要创建的C#程序控制其他表 **在我的ERD中,所有实体之间都有关系 …我数据库中的所有实体都必须与 其他实体 不,实体当然可以独立存在。虽然在实践中,如果你发现你很少有关系,你可能是做错了什么 你说得有点对,只有两个表可以有一
你说得有点对,只有两个表可以有一个关系,但我认为关系只能有两个参与者;表当然可以不仅仅与一个其他表相关。根据惯例,主键应该始终是
id
,外键可以称为othertablename\u id
,因此,如果一个表与所有其他表都有链接,则需要为其中每一个表指定一个键
例如:如果dogs
有多个主人,但owners
只能有一只狗,那么您可以在owner
表中只拥有dog\u id
。但是,您必须查询所有者
表才能找到一只狗的所有所有者
如果狗有一个以上的主人,而主人可以有一个以上的狗,那么你必须有一个名为dogs\u owners
的连接表,其中包含id和外键dog\u id
和owner\u id
当然,您可以根据需要为表和字段命名,但通常使用id
和\u id
是的,除了实体之间存在多对多关系外,实体通常仅等同于一个表。根据惯例,主键应始终为
id
,您的外键可以被称为othertablename\u id
,因此,如果一个表有一个指向所有其他表的链接,那么它需要为其中的每一个表指定一个键
例如:如果dogs
有多个主人,但owners
只能有一只狗,那么您可以在owner
表中只拥有dog\u id
。但是,您必须查询所有者
表才能找到一只狗的所有所有者
如果狗有一个以上的主人,而主人可以有一个以上的狗,那么你必须有一个名为dogs\u owners
的连接表,其中包含id和外键dog\u id
和owner\u id
当然,您可以根据需要为表和字段命名,但通常使用id
和\u id
是的,除了实体之间存在多对多关系外,一个实体通常只相当于一个表。所有实体不必彼此之间存在关系。如果一个实体以某种方式与另一个实体相关,则ERD中的两个实体之间将只存在关系 创建表的一般经验法则是:
所有实体不必彼此有关系。如果一个实体以某种方式与另一个实体相关,则ERD中的两个实体之间将只存在关系 创建表的一般经验法则是:
任何时候在数据库中创建表时,如果表中的信息之间存在关系,则应创建关系,以确保在将数据输入到表中时,引用数据将在其中。这将强制引用完整性。例如: 员工数据库:
EmployeeInfoTable:
pk EmployeeID
EmployeeName
EmployeeDateHired
fk SalaryID
EmployeeLoginTable
pk LoginID
fk EmployeeID
Username
Password
SalaryTable
pk SalaryID
SalaryRange
因此,这样做的目的是确保如果您向员工添加工资,那么它必须存在于工资表中,如果您添加了登录名,那么您必须有一名员工作为参考。它只是增加了一层安全性,以确保输入到数据库中的数据有效且可以使用
虽然从技术上讲,您可以使用C#或任何您想要的编程语言来控制这一点,但很容易忘记这些小规则,尤其是在拥有200个或更多表的数据库中。因此,养成使用关系和保持引用完整性的习惯是一件非常好的事情。无论何时创建ta