我正在尝试创建友谊网站。我遇到的问题是,当用户加入网站时,他们必须填写表单。此表单包含许多用户必须填写的固定下拉项。以下是其中一个下拉列表的示例。
下拉(收藏宠物)
最喜欢的宠物中的物品
1. Dog
2. Cat
3. Bird
4. Hampster
将此信息存储在数据库中的最佳方法是什么。现在,配置文件表有一个列用于每个固定下拉列表。这是正确的数据库设计吗?参见示例:
User ID | Age | Country | Favorite Pet | Favorite Season
--------------------------------------------------------------
1 | 29 | United States | Bird | Summer
这是正确的数据库设计吗?现在我可能有30 +列。大多数列都是固定的,因为它们是下拉列表,用户必须选择其中一个选项。
这个问题的正确方法是什么?
p.s。我还想过为每个下拉列表创建一个表,但这会使查询变得复杂并导致很多表。
另一种方法
Profile
表
ID | username | age
-------------------
1 | jason | 27
profileDropDown
表:
ID | userID | dropdownID
------------------------
1 | 1 | 2
2 | 1 | 7
下拉表:
ID | dropdown | option
---------------------
1 | pet | bird
2 | pet | cat
3 | pet | dog
4 | pet | Hampster
5 | season | Winter
6 | Season | Summer
7 | Season | Fall
8 | Season | spring
答案 0 :(得分:3)
"最佳接近方式"或"正确的方式"将在这里开展很多讨论,这可能会使这个问题被关闭。我建议创建一个下拉表,其中包含一个名为" TYPE"的列。或" NAME"。然后,您可以在该列中放置下拉列表的唯一标识符以标识该集合。然后有另一个名为" VALUE"保持下拉值。
例如:
ID | TYPE | VALUE
1 | PET | BIRD
2 | PET | DOG
3 | PET | FISH
4 | SEASON | FALL
5 | SEASON | WINTER
6 | SEASON | SPRING
7 | SEASON | SUMMER
然后,为了让您的PET下拉,您只需从此表中选择所有类型=' PET'
答案 1 :(得分:0)
每个用户都会问一组问题(下拉菜单)吗?您(或您的继任者)是否需要随着时间的推移添加或删除问题?如果不是,那么对于每个问题有一列的用户的表是可以的,但是如果是,则它变得复杂。
数据库纯粹主义者每个问题需要两个表:
如果添加了新问题,请创建新表格;如果删除了一个问题,请删除这些表格(当然,还要调整所有代码。呃。)这样可行,但效率很低。
如果可能的话,所有的问题和答案都是相似的,那么一个三表模型就表明了这一点:
添加和删除问题非常简单,如识别跳过或未回答的问题(例如,如果您在上线后一个月添加新问题)。
与大多数事物一样,这背后有很多“它取决于”,其中大部分取决于您希望系统做什么。