2011-08-08 5 views
4

mysql 텍스트 필드에 배열을 JSON 문자열로 저장하는 것이 좋은 방법인지 궁금합니다.PHP/MySQL - 배열 데이터를 JSON으로 저장하는 것은 좋지 않습니까?

사용자가 인보이스에 무제한의 제품을 추가 할 수있는 인보이스를 생성 중입니다. 양식이 제출되면 모든 빈 항목 등이 제거되지만 일반적으로 2 ~ 5 개 항목이 남습니다. 각 항목에는 SKU, 가격, 이름 및 설명이 있습니다.

이 상황에 대한 나의 옵션은 (1) 새 제품 테이블을 만들고, 새 행으로 각 항목을 추가하고, 송장 테이블과 연결하고, 데이터에 액세스 할 때 두 테이블을 호출하는 것입니다. 또는 (2) 모든 제품 데이터를 단일 JSON 텍스트 필드로 송장 테이블에 저장 한 다음 다른 테이블을 만들거나 액세스하지 않습니다.

저는 MySQL 프로그래밍에있어 매우 엄격하기 때문에 MySQL에서 JSON을 사용하는 것이 눈살을 찌게 할 것입니다. 내가 맞습니까? 누군가가 이것에 대해 밝힐 수 있습니까?

답변

13

만 있으면됩니다. 그러면 나쁜 습관이 아닙니다.

그러나 어떤 종류의 처리, 정렬 또는 유사한 작업을 수행해야하는 경우 정규화해야합니다.

+0

답장을 보내 주셔서 감사합니다. 이것은 실제로 실제로 완벽합니다. 제품별로 검색/정렬을 허용 할 때까지는 괜찮을 것입니다. – Tim

+0

데이터베이스 논리를 구현하기 시작하면 잘못된 결과가 발생합니다. 그것은 SQL 데이터베이스로 작업 할 때의 나의 경험 법칙입니다. – tjameson

+0

그래도 괜찮을 지 모르겠다. 당신이 말한 것과 기본적으로 맞지만, 이와 같은 제품을 구할 때, 당신은 어떤 주문이 ​​SKU xxx인지를 알고 싶을 것입니다. 또는 주문에 제품 라인을 쉽게 추가하십시오. 또는 정말로 모든 것을하십시오. id, orderid, sku, price, name, descripiton 필드와 함께 order-rows-order를 가진 테이블을 추가하는 것은 정말로 어렵지 않습니다. 어쩌면 더 나중에. 나는 그렇게하지 않을 이유가 없다. 이 표를 결합하지 않으면 성능 문제가 발생합니다. – Nanne

0

저는 MySQL의 전문가는 아니지만, 당신이 성취하고자하는 바에 달려 있다고 생각합니다. 인보이스에 저장 한 제품을 검색 할 수 있도록 하시겠습니까? 그렇다면 관계형 데이터베이스 구조를 사용하는 것이 좋습니다.

검색 할 필요가 없다면 데이터를 JSON 문자열 또는 단순히 직렬화 된 배열로 저장할 수 있으며 JSON을 사용하지 않아도됩니다.

귀하의 필요에 따라 다릅니다.

0

JSON에 저장하면 SQL을 사용하여 쿼리 할 수 ​​없습니다. 예를 들어 내가 다른 사람보다 직접 질문에 대답 한

5

때문에 제품 A의 3 개 이상을 구입 한 모든 송장을 찾을 수없는, 내가 프린지 접근을하고 향후 유지 보수 대신를 해결하기 위해거야.

JSON처럼 데이터베이스 엔터티 (SKU, 가격, 이름, 설명)로만 변경 될 수있는 다양한 항목을 저장하면 많은 양의 데이터가 중복 될 수 있습니다.

대신에 말한대로하고 모든 제품에 대한 표를 만드십시오. 그런 다음 invoices_have_products에 대한 다른 표를 만듭니다. 그런 다음 인보이스 ID가 일치하는 invoices_have_products의 모든 행을 가져온 다음 제품 ID가 invoices_have_products에서 가져온 행과 일치하는 모든 행을 products에서 가져올 수 있습니다.

지금은 약간 지루할 수도 있지만 모든 데이터가 깔끔한 테이블에 있고 쉽게 쿼리 할 수 ​​있으면 훨씬 행복해집니다. JSON을 사용하여 수백만 개의 텍스트 필드에서 보고서를 실행하는 악몽을 생각해보십시오. 절대적으로 공포스러운.

질문의 일부에 대답하려면 : 아니요, 이것이 우수 사례가 아닌 것으로 생각합니다. 그리고 솔직히 말해서 나쁜 습관처럼 보입니다.

관련 문제