2

我正处于创建 php mysql 数据库的设计阶段,其中组需要共享一个成员表,但需要有自己的表来存储其他数据,如消息、设置、出勤等。

我在想我可以在一个数据库中创建所有表,并为每个表提供一个 group_id,这样您就可以按该组进行过滤并仅显示该数据。这可能存在安全问题,并且数据库可能会变大。

我正在考虑的另一种方法是使用带有 group_id 的成员表创建一个数据库,然后为每个组创建单独的数据库。这更难可视化并且更难正确查询。

我的问题是,有没有更好的方法来做到这一点,或者是这两种方法之一,如果是这样,你会推荐一个吗?为什么?

4

2 回答 2

1

安全问题是程序员的错,而不是数据库的错。

数据库本来就是要变的——瓶颈通常在于糟糕的 php 代码,或者由于资源处理不佳而导致的错误 HTTP 有效负载 [没有缓存、无用的请求、错误的标记]。

只需坚持使用一个数据库,并使用精心设计的表格。

于 2012-09-29T14:54:53.803 回答
0

为什么组要拥有自己的带有消息的表?那是非常低效的。

您所描述的结构是一种称为 1:n 或 1 对多的关系。

只需创建一个消息表,其中的字段指向消息所属的组:

CREATE TABLE `Groups` (
  `GroupId` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(64) NOT NULL,
  PRIMARY KEY (`GroupId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `Messages` (
  `MessageId` int(11) NOT NULL AUTO_INCREMENT,
  `GroupId` int(11) NOT NULL,
  `Message` text NOT NULL,
  PRIMARY KEY (`MessageId`),
  KEY `FK_Group` (`GroupId`),
  CONSTRAINT `FK_GroupMessage` FOREIGN KEY (`GroupId`) REFERENCES `Groups` (`GroupId`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
于 2012-09-29T14:57:17.217 回答