예를 들어, 직원 목록이있는 테이블이 있다고 가정합니다. 직원 ID가 기본 키이며 이름, 나이 등 직원의 다른 세부 정보가 있습니다. 직원이 여러 전화 번호를 가질 수 있습니다. 따라서 다중 값 속성이됩니다. 직원들이 보유한 전화 (연락처)의 수를 알 수 없습니다. 여러 값을 갖는 열이있는 sqlite 테이블을 만들 수 있습니까?
그것은 가능 sqlite3를의 속성을 다중했다고? 또는이를 수용 할 수있는 방법이 있습니까?감사합니다.
예를 들어, 직원 목록이있는 테이블이 있다고 가정합니다. 직원 ID가 기본 키이며 이름, 나이 등 직원의 다른 세부 정보가 있습니다. 직원이 여러 전화 번호를 가질 수 있습니다. 따라서 다중 값 속성이됩니다. 직원들이 보유한 전화 (연락처)의 수를 알 수 없습니다. 여러 값을 갖는 열이있는 sqlite 테이블을 만들 수 있습니까?
그것은 가능 sqlite3를의 속성을 다중했다고? 또는이를 수용 할 수있는 방법이 있습니까?감사합니다.
당신은 다음과 같은 아이디어로이 작업을 수행 할 수 있습니다
옵션 3이 가장 유연한 것처럼 보이지만 대부분의 경우 옵션 2가 구현 된 것으로 나타났습니다 (일반적으로 사람들은 전화 번호 수가 제한적입니다).
여러 개의 연락처 번호를 저장하는 직렬화 가능 사용자 정의 클래스를 만들 수도 있습니다. 그런 다음 사용자 정의 클래스를 byte []로 직렬화 한 다음 byte []에서 ASCII 문자열을 추출 할 수 있습니다. 여러 연락 전화 번호의 문자열을 저장할 수 있습니다,하지만 당신은 데이터베이스에서 다시 읽은 후 데이터를 역 직렬화해야합니다 (아래의 과정을 반대로.)
public class Contacts : ISerializable
{
}
if (Contacts is ISerializable)
{
string contactNumbers = String.Empty;
using (var stream = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(stream, Contacts);
stream.Close();
var bytes = stream.GetBuffer();
contactNumbers = System.Text.Encoding.ASCII.GetString(bytes));
}
//Perform the update for this column or add to your insert query.
}
이의 잘못된 접근입니다 관계형 데이터베이스 용어. 대신 직원 전화 번호를 보관할 별도의 테이블을 만들어야합니다. 테이블에는 employee_id 및 phone_number 열이 있습니다. 각 직원은 보유하고있는 전화 번호 수에 따라이 테이블에 0 개 이상의 레코드가있을 수 있습니다. 각 전화 번호가 무엇인지에 대한 정보를 가질 수 있도록
는 또한 설명 열을 포함 할 수 있습니다. 단일 열에서 여러 값을 저장
관계형 데이터베이스에 아뇨 일차 없다. 제발 하지마. 이 "정상적인 형태"의 부족을 같이
다중 값 필드는 DB 설계에 아주 나쁜 관행으로 간주됩니다. 대신 다음을 수행해야합니다.
이제 유형에 따라 원하는 전화 번호를 새 테이블에 추가 할 수 있습니다. 필요한 경우 employeeId로 쿼리하고 입력하십시오.
이 옵션뿐만 아니라 더 유연하지만 실제로 존재하는 전화 번호에 대한 스토리지를 할당합니다대로 DB 저장 크기를 저장합니다.
옵션 3만이 유일한 합리적인 솔루션입니다. 다른 것들은 데이터베이스의 정규화 원칙에 위배되며 결과적인 프로그래밍을 더 어렵게 만들 것입니다. –
여기 래리 (Larry)의 조언을 따라야합니다. 데이터베이스 스키마를 변경하거나 다른 사람을 설득 할 수없는 경우 코딩 솔루션을 사용하여 문제를 해결하는 것을 환영합니다. 그러나 진지하게 래리에게 귀를 기울이십시오. – Dubs
의견을 주셔서 감사합니다. 예, 스키마 정규화 측면에서 옵션 3이 가장 좋습니다. 그러나 전화 번호의 경우 사람들이 1 또는 2 개의 번호를 갖고 있으며 많은 시스템이 그 전화 번호 만 처리하도록 설계되어있는 것이 일반적입니다. 또한 질의를 단순화하고 일종의 시스템에서 중요한 조인을 피합니다. – dzida