没有主键的数据库表

时间:2015-05-07 16:50:58

标签: mysql database

我有一张用于留言板的表格(见下文)。我知道最佳实践要求创建Primary Key,但我认为没有理由创建一个UID, GRP_ID。我将主要搜索(Last_timestp)并将创建一个索引。删除将基于PK。在这种情况下,是否应该有CREATE TABLE CP.CHAT (UID BIGINT NOT NULL, GRP_ID BIGINT NOT NULL, CHAT VARCHAR(200) NOT NULL, LAST_TIMESTP TIMESTAMP);

class MyCustomException extends Exception {
    public static function errorHandlerCallback($code, $string, $file, $line, $context) {
        $e = new self($string, $code);
        $e->line = $line;
        $e->file = $file;
        throw $e;
    }
}

set_error_handler(['MyCustomException', 'errorHandlerCallback'], E_ALL);

2 个答案:

答案 0 :(得分:0)

不需要主键,您的表格也可以正常使用。

以下是我几乎总是使用主键的一些原因。

  1. 他们让您唯一地定位一行。如果您有多行具有完全相同的数据,则将其删除可能会非常繁琐。

  2. 它们为表提供隐式排序。如果要对数据库进行故障排除,则按键顺序会告诉您创建它们的顺序。

  3. 最终,PK占用的空间在存储空间方面不会成为数据库的巨大开销。拥有它并没有什么坏处,但它可以帮助它。

答案 1 :(得分:0)

我认为没有必要告诉你主键是什么以及它的用途。看来你已经知道了,并且结构很好。

问题是,如果你没有任何其他依赖于这个表的表,那么你的表设置就足够了。由于你已经有了一个UID列,我说我会把它变成PK,因为它在存储方面不会花费太多,但也可以帮助你对表进行排序(通过自动递增整数)并且可以作为选择性的删除和更新操作。

仍然无法弄清楚你将如何通过Last_timestp值删除记录,但是......