【问题标题】:Using different tables for different kind of datatypes in mysql在mysql中为不同类型的数据类型使用不同的表
【发布时间】:2012-12-20 11:22:12
【问题描述】:

我正在为会员管理创建一个数据库。我们有元素(用户),这些用户有属性(例如,姓氏、姓氏、出生日期)。现在,名称是文本,但出生日期是日期,所以我想将其存储在数据类型为“日期”的列中。因为用户的属性可能不同,所以我想要一个带有元素的表格、一个带有属性的表格以及一个将两者链接在一起的表格。但是,为了能够使用不同类型的数据类型,对于每种数据类型,我必须创建一个不同的表。你会得到这样的东西:

Table: Users
------------
user
1
2

table: properties
---------------------------------
property  propertyName   datatype
1         surname        text
2         lastname       text
3         date of birth  date

Table: PropertiesString
---------------------------
property   value
1          John
2          Tim
3          Smith
4          Jones

Table: PropertiesDate
-------------------------
property   value
1          04-11-1966
2          07-08-1971

table: userPropertiesLinked
-----------------------------
user   property propertyValue
1      1        1
1      2        3
2      1        2
2      2        4
2      3        1
1      3        2

综合来看,我们有 2 个用户,John Smith (04-11-1966) 和 Tim Jones (07-08-1971)。

我的问题是:这是最好的方法吗?这个数据库的设置方式非常易于搜索,人们可以有多个属性,属性不会存储两次等。我遇到的问题是,一个表中的“属性”1 是 John,而在其他 04-11-1966。有没有办法使这些值唯一并自动递增,即使它们位于不同的表中?有没有办法将它们放在一个表格中,而不会冒双重信息或空单元格的风险?

任何帮助将不胜感激!

【问题讨论】:

  • 你以前做过这个吗?如果没有,请阅读外键。

标签: mysql database-design relational-database database-schema sqldatatypes


【解决方案1】:

我认为你可以考虑用外键连接两个表但值相同,像这样:

constraint PropertiesString_fk foreign key (value) references  PropertiesDate(or other table) value.

至于自增,你可以这样想:

ALTER TABLE tablename DROP id;
ALTER TABLE tablename ADD id INT NOT NULL PRIMARY KEY AUTO_INCREMENT FIRST  

至于如何将它们放在一个表中,可以使用命令“select”和“distinct”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多