Database design 以下哪些数据库表结构是正确的?

Database design 以下哪些数据库表结构是正确的?,database-design,database-schema,Database Design,Database Schema,我正在创建一个小型web应用程序,目前正在处理我的数据库模式。我有两个选择表结构,但不确定哪一个是正确的关系,感谢您的建议 选项1 table1 - id (int) [auto increment, pk] - name (varchar) table2 - id (int) [auto increment, pk] - name (varchar) - table1Id (int) [fk on table1.id] 选项2 table1 - id (int) [

我正在创建一个小型web应用程序,目前正在处理我的数据库模式。我有两个选择表结构,但不确定哪一个是正确的关系,感谢您的建议

选项1

table1
  - id (int) [auto increment, pk]
  - name (varchar)

table2
  - id (int) [auto increment, pk]
  - name (varchar)
  - table1Id (int) [fk on table1.id]
选项2

table1
  - id (int) [auto increment, pk, fk on table3.table1Id]
  - name (varchar)

table2
  - id (int) [auto increment, pk, fk on table3.table2Id]
  - name (varchar)

table3
  - table1Id (int) [pk]
  - table2Id (int [pk]
欣赏人们的想法

编辑-工作示例:

tblCountries
  - id (int) [auto increment, pk]
  - name (varchar)

tblCities
  - id (int) [auto increment, pk]
  - name (varchar)

我的查询将提取一个城市,然后需要相应的国家。

您的答案取决于您希望如何处理分为两个国家的城市。像旧的东德/西德柏林一样,它能同时在两个国家吗?如果是这样,您必须选择选项2。因此,同一城市行可以与两个不同的国家关联

我真的找不到任何被分成两个国家的城市(试过谷歌)。因此,我将忽略分割城市的情况,只选择选项1


我更喜欢CityID、CityName、CountryID和CountryName,而不仅仅是ID和Name。若您需要搜索代码,那个么若您只使用名称和ID来查找任何内容,那个么这是不可能的。这实际上取决于访问数据库的方式。如果您正在使用OOP和/或某些框架,那么对属性使用“ID”和“Name”更有意义。如果您正在编写过程和直接查询,那么“xxxxID”和“xxxxx name”会更好。无论你选择什么,都要保持一致。

问题是-数据中是否存在1:M或N:M关系。这是决定这两个选项中哪一个正确的因素。每一个选项都是正确的,这取决于你想做什么。但是,你没有说你想做什么。对不起,我是一个相对的新手。将存在一对多关系(表1中的一项在表2中可以有多个)。我的查询将引用表2中的项,并希望从表1中提取相应的项。如果我发布一个更好的例子会更容易吗?我已经添加了一个例子。谢谢。感谢您提供的信息。