php - 将可标记的人名合并到数据库中

标签 php mysql database-design database-schema

第一次发帖,第一次使用关系数据库,所以要温柔!

在处理相关小说小说的数据库时,我在与负责人(例如作者、插画家或序言作者)方面遇到了一些困难。

我想将人员存储在“人员”表中,其中包含名字和姓氏,但是当用户在数据库中输入一本新书时,我希望负责人的行为几乎像标签一样,并出现一个自动完成的列表以及允许他们在单个字段而不是两个字段中输入新作者。

此外,每个人都将扮演与该书相关的特定角色。带有“book_id”、“person_id”和“role_id”的表“book-person-role”有什么严重错误吗?或者我应该将其分成两个表,“book-person”和“person-role”,并将此“person-role”表链接到“book-person”表的主 ID?

最佳答案

首先是第二个问题:

Further, each person will have a role tied specifically to that book in question. Is there anything terribly wrong with a table 'book-person-role' with 'book_id', 'person_id', and 'role_id'?

如果只有一个 role_id 连接到 book_id 和 person_id,则可以使用一张表。连接表的速度很慢,通常表越少,它的工作速度就越快(如果其他一切都没有改变)。在这种特殊情况下,行数不会增加。因此,拥有一张 table 并没有什么问题,甚至还有一个好处:它运行得更快。

关于第一个问题。如果书籍与人之间存在多对一的关系,则应该对书籍和人使用不同的表。您可以随心所欲地设计用户界面。您可以加入表格,提出多个请求。您没有说明您正在使用什么编程语言,因此我无法帮助您为您想要的用户界面编写代码。

编辑: 您建议制作人员表(名字和姓氏作为不同字段)的方法是一个好方法。当您想要查找某个人时,您可以对服务器进行 AJAX 调用,服务器使用 OR 并返回列表。例如,您想在 #name_input 输入标记中查找名称。

HTML:

<input id="name_input" type='text' />

JavaScript:

$(document).on('keydown','#name_input',function(){
    var jqxhr = $.ajax( "name_lookup.php?name="+$("#name_input").val())
      .done(function(data, textStatus, jqXHR) {
        alert( "add data to your lookup list" );
      })
      .fail(function() {
        alert( "error" );
      })
});

PHP:

$name = mysql_real_escape_string($_GET['name']);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
if ($result = $mysqli->query(
  "SELECT id, first_name, last_name FROM persons WHERE first_name = $name OR last_name = $name ORDER BY last_name"
)) {
    $rows = array();
    while($row = $result->fetch_assoc()) {
        $rows[] = $row;
    }
    echo json_encode($rows);
}else{
    echo "Error";
}

关于php - 将可标记的人名合并到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23714400/

相关文章:

带有 MYSQL 查询的 PHP 表单在页面加载时运行,而不是在点击提交按钮时运行

mysql - 根据列中的分组元素对项目进行编号

mysql - 包含 IP 地址和网络信息的数据库设计

PHP : parsing questions then getting the keywords

HTML列表结构中的PHP递归菜单

mysql - 如何旋转 MySQL 实体-属性-值模式

mysql - 表的性能增强

PHP 动态查询构建以在 null 时支持正面和负面匹配查询

php - WordPress - 在 "get_template_part();"之前插入空行

php - 在本地主机上创建新的 symfony 项目