2014-07-21 25 views
6

vấn đề của tôi là, tôi muốn lưu trữ một người có nhiều số điện thoại trong cơ sở dữ liệu. cho một biến duy nhất cho số sẽ chỉ lưu trữ một số cho mỗi số. bây giờ nếu tôi muốn thêm số điện thoại khác, nó sẽ tạo một bản ghi mới khác với cùng chi tiết nhưng số khác. Tôi muốn hiển thị tất cả các số này cùng nhau. có ai giúp được không?cách lưu trữ nhiều giá trị trong một trường trong cơ sở dữ liệu sql

+1

Thêm mô tả bảng và bản ghi mẫu để mô tả những gì bạn có và thứ bạn muốn .. – Jens

+0

Bạn cũng có thể xác định 'trường văn bản' và bạn sẽ chèn một mảng' mảng' chứa tất cả các số điện thoại của bạn. –

+0

Bạn có thể lưu trữ các số điện thoại dưới dạng số được phân tách bằng dấu phẩy và sau đó chia các số điện thoại bằng dấu phẩy làm dấu phân cách? –

Trả lời

3

Bạn có thể sử dụng một bảng thứ hai để lưu trữ các con số, và liên kết lại với một chính nước ngoài:

PersonTable: PersonId, Name, etc.. 

Bảng thứ hai sẽ tổ chức những con số ...

NumbersTable: NumberId, PersonId(fk), Number 

Bạn có thể sau đó lấy các con số như thế này ...

SELECT p.Name, n.Number from PersonTable p Left Join NumbersTable n 
on p.PersonId = n.PersonId 

Đây là ví dụ đơn giản. Tôi đã sử dụng một số LEFT JOIN ở đây trong trường hợp một người không cung cấp số của họ. Ngoài ra, đây chỉ là mã giả, do đó, không sử dụng Bảng trong tên.

+0

Được giảm giá vì nó giống với câu trả lời trước đó. –

+1

Tôi đã nhập bằng tay và câu trả lời của tôi giải thích cách tham gia các bảng. Đó là một lý do tồi tệ cho một Downvote! – christiandev

+1

@DanBracuk, bạn đã downvoted một câu trả lời nhiều thông tin hơn, nhưng không có vấn đề với câu trả lời có lời khuyên yếu hơn? – christiandev

13

Bạn nên tạo các bảng riêng biệt cho Người và Số điện thoại.

CREATE TABLE Person(PersonId int IDENTITY(1,1) PRIMARY KEY) 

CREATE TABLE Phone(
    PersonId int, 
    PhoneNumber varchar(20), 
    CONSTRAINT PK_Phone PRIMARY KEY(PersonId,PhoneNumber), 
    CONSTRAINT FK_PersonId FOREIGN KEY(PersonId) REFERENCES Person(PersonId) 
    ) 
+0

Tôi đoán liên kết này hữu ích để hiểu tại sao câu trả lời này chính xác: http://en.wikipedia.org/wiki/First_normal_form – Vartlok

+0

yupp phương pháp này sẽ hoạt động .. cảm ơn bạn rất nhiều :) –

-1

Bạn có thể lưu trữ nhiều dữ liệu dưới dạng giá trị được phân tách bằng dấu phân cách. Sử dụng đường ống (|) hoặc nghiêng (~) làm dấu phân tách. Và khi chúng tôi đang chèn giá trị mới hoặc cập nhật giá trị hiện tại, hãy kiểm tra xem số điện thoại đã tồn tại chưa. Nếu đã có sẵn một số dữ liệu trong cột số điện thoại, chỉ cần thêm dữ liệu đó với dấu phân cách + số điện thoại mới.

+4

Đó là lời khuyên không tốt. Bạn không nên lưu trữ nhiều giá trị trong cùng một trường. – Linger

+0

vi.wikipedia.org/wiki/First_normal_form – Vartlok

+1

Điều gì sẽ xảy ra nếu bạn muốn tìm kiếm tất cả người dùng có 3 số điện thoại đầu tiên của họ là 'nnn' chẳng hạn? làm thế nào bạn sẽ truy vấn này? – christiandev

-1

Bạn chỉ có thể thêm họ bằng dấu phẩy. Nếu bạn đang làm một webapp, bạn có thể làm cột điện thoại của bạn một chuỗi và json mã hóa chúng, sau đó bạn sẽ phải hỗ trợ cho số lượng vô tận của số điện thoại :)

-1

Cách tốt nhất là:

  1. serialize điện thoại của bạn.no mảng,
  2. lưu trữ trong bảng của bạn,
  3. deserialize khi bạn muốn nhận điện thoại.không có.
Các vấn đề liên quan