我正在创建一个基于用户的网站.对于每个用户,我需要一些MySQL表来存储不同类型的信息(即userInfo,quotesSubmitted和ratesSubmitted).以下是一个更好的主意:
a)为站点创建一个数据库(即"mySite"),然后在其中创建数百或数千个表(即"userInfo_bob","quotessubmitted_bob","userInfo_shelly"和"quotesSubmitted_shelly")
要么
b)创建数百或数千个数据库(即"Bob","Shelly"等),每个数据库只有几个表(即"Bob"内部:userInfo,quotesSubmitted,ratesSubmitted等)
我应该使用一个数据库,该数据库中的许多表,还是每个数据库的许多数据库和几个表?
编辑:
问题是我需要跟踪谁评价了什么.这意味着如果用户已经评价了300个报价,我需要能够确切地知道用户评价了哪些报价.
也许我应该这样做?
一张报价表.一个表列出用户.一个表记录已经进行的所有评级(即三列:用户,报价,评级).这看似合理.这有什么问题吗?
使用一个数据库.
使用一个表来保存用户,使用一个表来保存引号.
在这两个表之间,您有一个表,其中包含将用户与引号匹配的信息,此表将保留用户给出报价的评级.
这种简单的设计允许您存储几乎无限数量的报价,无限制的用户,并且您将能够将每个报价与零个或多个用户匹配,反之亦然.
中间的表将包含用户和引用表的外键.
您可能会发现查看一些数据库设计基础知识很有帮助,这里有很多关于stackoverflow的相关问题.
从这些开始......
什么是正常化?
在设计数据库时要记住什么是重要的
有多少字段"太多"了?
更多表格或更多列?
我应该使用一个数据库,该数据库中的许多表,还是每个数据库的许多数据库和几个表?
也不应该使用一个数据库,一个用户表,一个报价表,一个费率表等.
然后,您在(例如)您的报价表中有一列,说明报价所针对的用户.
CREATE TABLE user ( user INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, ... ); CREATE TABLE quote ( quote INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, user INT(10) UNSIGNED NOT NULL, ... ); CREATE TABLE rate ( rate INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, user INT(10) UNSIGNED NOT NULL, ... );
然后JOIN
,在SELECT
语句中使用SQL 将表连接在一起.
编辑 - 上面假设用户和费率之间存在多对一的关系 - 其中有"多对多"关系,您需要为每种数据提供一个表,然后是另一个包含每个用户行的表< - >速率对.
许多数据库存在两个问题(实际上还有很多,但从这些开始.)
您不能使用数据库名称的参数.
当你第一次换桌子时你会怎么做?(提示:工作X(#数据库)).
并且"许多表格"表明您正在考虑每个用户的表格.这是另一个同样有问题的想法.