2014-05-17 27 views
0

首次發佈,第一次使用關係數據庫,所以要溫柔!將可標記人員姓名納入數據庫

在相關小說小說的數據庫上工作,我遇到了一些責任人的困難,比如作者,插畫家或序言作者。

我以爲將個人存儲在'persons'表中,並帶有first_name和last_name,但是當用戶向數據庫輸入一本新書時,我希望責任人幾乎像標籤一樣行動,並帶有自動完成列表出現以及允許他們在單個領域中輸入新的作者......而不是兩個。

此外,每個人都會有一個專門與該書相關的角色。 「book_id」,「person_id」和「role_id」這個表的「book-person-role」有什麼問題嗎?或者,我應該將這個「人 - 角色」表與「書 - 人」表的主要ID鏈接到兩張表中,即「書人」和「人物角色」?

回答

0

第一第二個問題:

而且,每個人都會有特別依賴於本書在質詢中的作用。 「book_id」,「person_id」和「role_id」這個表的「book-person-role」有什麼問題嗎?

如果只有一個role_id連接到book_id和person_id,則可以使用一個表。連接表格速度慢,通常表格越少,工作速度越快(如果其他條件不變)。在這種特殊情況下,行數不會增加。所以有一張桌子是沒有問題的,你甚至有獎金:它運作得更快。

關於第一個問題。如果你有多對一的書籍關係,你應該爲書籍和人物使用不同的表格。無論你喜歡什麼,你都可以做用戶界面。你可以連接表格,提出幾個請求。你沒有說你正在使用什麼編程語言,所以我不能幫你編寫你想要的用戶界面的代碼。

編輯: 你建議讓person表(first_name和last_name作爲不同字段)的方式是一個好方法。當你想查找某個人時,你向服務器發出一個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"; 
} 
+0

Oy公司,我很抱歉。有時候我有點密集。 我在用mySQL編寫PHP。我知道有一個關於作者與書籍的數據透視表...我主要關心的是如何存儲作者數據,主要是名稱,允許通過姓氏按字母順序排序以及爲單個輸入字段用戶。 – mam