在mysql中为不同类型的数据类型使用不同的表

时间:2013-01-06 16:07:23

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

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

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。有没有办法让这些值独特并自动增加,即使它们在不同的表中?有没有办法将它们放入一个表中,而不会冒双重信息或空单元格的风险?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

我认为您可以考虑使用外键来连接两个tabl但是相同的值,如下所示:

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”