Mysql 使用固定的子行数保持一对多关系的正确方法?

Mysql 使用固定的子行数保持一对多关系的正确方法?,mysql,entity-framework-core,Mysql,Entity Framework Core,我正在为Authors表和Books表之间的常见一对多关系建模 按照惯例,一个作者最多可以有30本书。所以,当一个作者获得了它的最大数量的书籍,而另一个想要分配给同一个作者时,我必须删除最旧的一个,并添加新的一个 我可以做删除Dead最老的书的明显操作,并添加新的一个来保持30本书的限制,但我不知道它是不是更直接的方式来做这件事,或者如果这是在这种情况下的常见做法。 < P>你可以考虑以下内容: CREATE TABLE my_table(id SERIAL PRIMARY KEY,author

我正在为Authors表和Books表之间的常见一对多关系建模

按照惯例,一个作者最多可以有30本书。所以,当一个作者获得了它的最大数量的书籍,而另一个想要分配给同一个作者时,我必须删除最旧的一个,并添加新的一个


我可以做删除Dead最老的书的明显操作,并添加新的一个来保持30本书的限制,但我不知道它是不是更直接的方式来做这件事,或者如果这是在这种情况下的常见做法。

< P>你可以考虑以下内容:

CREATE TABLE my_table(id SERIAL PRIMARY KEY,author_id INT NOT NULL,book VARCHAR(50) NULL);

INSERT INTO my_table (author_id) VALUES (1),(1),(1);

UPDATE my_table SET book = 'my first book' WHERE author_id = 1 ORDER BY book,id LIMIT 1;

SELECT * FROM my_table;
+----+-----------+---------------+
| id | author_id | book          |
+----+-----------+---------------+
|  1 |         1 | my first book |
|  2 |         1 | NULL          |
|  3 |         1 | NULL          |
+----+-----------+---------------+

UPDATE my_table SET book = 'my second book' WHERE author_id = 1 ORDER BY book,id LIMIT 1;

UPDATE my_table SET book = 'my third book' WHERE author_id = 1 ORDER BY book,id LIMIT 1;

UPDATE my_table SET book = 'my fourth book' WHERE author_id = 1 ORDER BY book,id LIMIT 1;

SELECT * FROM my_table;
+----+-----------+----------------+
| id | author_id | book           |
+----+-----------+----------------+
|  1 |         1 | my fourth book |
|  2 |         1 | my second book |
|  3 |         1 | my third book  |
+----+-----------+----------------+

哦,忘了添加时间戳(或编辑id的机制)-:-$,但希望您能理解;如果我有一分钟的时间,我会编辑它。如果您不想提前为每个作者插入30个数据集,您可以创建一个先统计作者的存储过程,如果少于30个,您可以进行插入,否则您可以像“草莓”建议的那样更新作者。
如果您通过存储库访问数据库,您可以用repo方法以同样的方式处理它。

对数据存储施加这样的限制(与数据检索相反)有点不寻常,因此我怀疑这不是一种常见的做法;我认为这有点取决于用户体验,以及用户是否想决定哪些条目被重写。一个想法是为每个作者填充30行,然后在按“空白”然后按日期排序时只允许对行进行更新。另一个想法是,idea表有一个记录删除列,值为1/0,如果每个author行到达30行,它必须更新该列,在record\u deleted列上获取带有where子句的30行。我只需要记住使用更新:)